package com.tarena.lbs.coupon.service;

import com.tarena.lbs.base.protocol.exception.BusinessException;
import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.coupon.api.pojo.param.UserCouponsParam;
import com.tarena.lbs.coupon.pojo.param.CouponParam;
import com.tarena.lbs.coupon.pojo.query.CouponQuery;
import com.tarena.lbs.coupon.pojo.query.UserCouponCodeQuery;
import com.tarena.lbs.coupon.pojo.query.UserCouponQuery;
import com.tarena.lbs.coupon.pojo.vo.CouponVO;
import com.tarena.lbs.coupon.pojo.vo.UserCouponsVO;

public interface CouponService {

    /**
     * 分页查询优惠券列表
     */
    PageResult<CouponVO> pageList(CouponQuery query) throws BusinessException;

    /**
     * 根据ID查询优惠券详情
     */
    CouponVO getById(Integer id) throws BusinessException;

    /**
     * 保存优惠券
     */
    void save(CouponParam param) throws BusinessException;

    /**
     * 更新优惠券
     */
    void update(CouponParam param) throws BusinessException;

    /**
     * 分页查询用户优惠券列表
     */
    PageResult<UserCouponsVO> getUserCouponList(UserCouponQuery query) throws BusinessException;

    /**
     * 用户领取优惠券
     */
    void receiveCoupon(UserCouponsParam param) throws BusinessException;

    /**
     * 查看优惠券二维码
     */
    UserCouponsVO getCouponQrCode(UserCouponCodeQuery query) throws BusinessException;

    /**
     * 优惠券核销
     */
    void verifyCoupon(String couponCode) throws BusinessException;
}
